Intro

Packages

library(tidyverse)
library(ggthemes)
library(gganimate)
library(glue)
library(readxl)
library(janitor)
library(rlang)
theme_set(theme_minimal(base_size = 26, base_family = "Roboto"))

pre_2016_decile <- exprs(
  rank %in% c(1:651) ~ "1",
  rank %in% c(652:1301) ~ "2",
  rank %in% c(1302:1952) ~ "3",
  rank %in% c(1953:2602) ~ "4",
  rank %in% c(2603:3253) ~ "5",
  rank %in% c(3254:3903) ~ "6",
  rank %in% c(3904:4554) ~ "7",
  rank %in% c(4555:5204) ~ "8",
  rank %in% c(5205:5855) ~ "9",
  rank %in% c(5856:6505) ~ "10")

post_2016_decile <- exprs(
  rank %in% c(1:697) ~ "1",
  rank %in% c(698:1395) ~ "2",
  rank %in% c(1396:2092) ~ "3",
  rank %in% c(2093:2790) ~ "4",
  rank %in% c(2791:3488) ~ "5",
  rank %in% c(3489:4185) ~ "6",
  rank %in% c(4186:4883) ~ "7",
  rank %in% c(4884:5580) ~ "8",
  rank %in% c(5581:6278) ~ "9",
  rank %in% c(6279:6976) ~ "10")

Data

2006

simd_2006 <- read_xls("raw_data/SIMD_2006.xls")  %>% 
  clean_names() %>% 
  select(local_authority_name, data_zone, total_population_sape_2004, simd_2006_rank) %>% 
  rename(la = local_authority_name,
         pop = total_population_sape_2004,
         rank = simd_2006_rank) %>% 
  mutate(year = "2006", 
         decile = case_when(!!!pre_2016_decile), 
         la = str_replace(la, "Edinburgh, City of", "City of Edinburgh"),
         la = str_replace(la, "Eilean Siar", "Na h-Eileanan an Iar"))
## New names:
## * `` -> ...25
simd_2006

2009

^

simd_2009 <- read_xls("raw_data/SIMD_2009.xls") %>%  
  clean_names() %>% 
  select(local_authority_name, data_zone, 
         total_population_sape_2007, simd_2009_v2_rank_revised_19_07_10) %>% 
  rename(la = local_authority_name, 
         pop = total_population_sape_2007,
         rank = simd_2009_v2_rank_revised_19_07_10) %>% 
  mutate(year = "2009",
         decile = case_when(!!!pre_2016_decile),
         la = str_replace(la, "Edinburgh, City of", "City of Edinburgh"),
         la = str_replace(la, "Eilean Siar", "Na h-Eileanan an Iar"))
## New names:
## * `` -> ...25
simd_2009

2012

simd_2012 <- read_xls("raw_data/SIMD_2012.xls") %>% 
  clean_names() %>% 
  select(local_authority_name, data_zone, 
         total_population_sape_2010, overall_simd_2012_rank) %>% 
  rename(la = local_authority_name,
         pop = total_population_sape_2010,
         rank = overall_simd_2012_rank) %>% 
  mutate(year = "2012",
         decile = case_when(!!!pre_2016_decile),
         la = str_replace(la, "Edinburgh, City of", "City of Edinburgh"),
         la = str_replace(la, "Eilean Siar", "Na h-Eileanan an Iar"))
## New names:
## * `` -> ...26
simd_2012

2016

simd_2016 <- read_xlsx("raw_data/SIMD_2016.xlsx", sheet = 2) %>% 
  clean_names() %>% 
  select(council_area, x2016, total_population, overall_simd16_rank) %>% 
  rename(la = council_area,
         data_zone = x2016,
         pop = total_population,
         rank = overall_simd16_rank) %>% 
  mutate(year = "2016",
         decile = case_when(!!!post_2016_decile),
         la = str_replace(la, "Argyll and Bute", "Argyll & Bute"),
         la = str_replace(la, "Dumfries and Galloway", "Dumfries & Galloway"),
         la = str_replace(la, "Perth and Kinross", "Perth & Kinross"))

simd_2016

2020

simd_2020 <- read_xlsx("raw_data/SIMD_2020.xlsx", sheet = 2) %>% 
  clean_names() %>% 
  select(council_area, data_zone, total_population, simd2020_rank) %>% 
  rename(la = council_area,
         pop = total_population,
         rank = simd2020_rank) %>% 
  mutate(year = "2020",
         decile = case_when(!!!post_2016_decile),
         la = str_replace(la, "Argyll and Bute", "Argyll & Bute"),
         la = str_replace(la, "Dumfries and Galloway", "Dumfries & Galloway"),
         la = str_replace(la, "Perth and Kinross", "Perth & Kinross")) %>% 
  arrange(la, year)

simd_2020

Join together

overall_data <- 
  full_join(simd_2006, simd_2009) %>% 
  full_join(., simd_2012) %>% 
  full_join(., simd_2016) %>% 
  full_join(., simd_2020) 
## Joining, by = c("la", "data_zone", "pop", "rank", "year", "decile")Joining, by
## = c("la", "data_zone", "pop", "rank", "year", "decile")Joining, by = c("la",
## "data_zone", "pop", "rank", "year", "decile")Joining, by = c("la", "data_zone",
## "pop", "rank", "year", "decile")

Tidy

overall_data %<>% 
  mutate(decile = factor(decile,
                         levels = c(1:10),
                                  labels = c("1", "2", "3", "4", "5",
                                             "6", "7", "8", "9", "10")),
         year = factor(year,
                       levels = c("2006", "2009", "2012", "2016", "2020"),
                       labels = c("2006", "2009", "2012", "2016", "2020"))) %>% 
  group_by(la, year, decile) %>% 
  mutate(total_dec_pop = sum(pop)) %>% 
  ungroup %>% 
  distinct(la, year, decile, .keep_all = TRUE) %>% 
  arrange(la, year, decile) %>% 
  group_by(la, year) %>% 
  mutate(frq = total_dec_pop/sum(total_dec_pop)) %>% 
  ungroup %>% 
  select(la, year, decile, frq)
rm(list = c("post_2016_decile", "pre_2016_decile", "simd_2006", "simd_2009", 
            "simd_2012", "simd_2016", "simd_2020"))
overall_data

Plot

base_plot <- 
  overall_data %>% 
  ggplot(aes(decile, frq, fill = decile)) +
  geom_col() +
  scale_fill_ptol(guide = guide_legend(nrow = 1),
                  labels = c("1-most deprived", "2", "3", "4", "5",
                             "6", "7", "8", "9", "10-most affluent")) +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
  facet_wrap(~la, strip.position = "bottom") +
  theme(legend.position = "bottom",
        axis.text.x = element_blank(),
        plot.subtitle = element_text(size = 30))  

anime <- 
  base_plot +
  transition_states(year,
                    transition_length = 6,
                    state_length = 3) +
  ease_aes("cubic-in-out") +
  labs(subtitle = "Year: {closest_state}", 
       title = "Change in percentage living in SIMD deciles by Local Authority",
       x = "",
       y = "",
       fill = "SIMD Decile",
       caption = "Data from https://www.gov.scot/publications/scottish-index-of-multiple-deprivation-2020-data-zone-look-up/")
    


animate(anime, width = 1400, height = 1000)

anim_save(filename = "plots/simd.gif", animation = last_animation())

Sesssion Info

devtools::session_info()
## ─ Session info ───────────────────────────────────────────────────────────────
##  setting  value                       
##  version  R version 3.6.2 (2019-12-12)
##  os       macOS Catalina 10.15.2      
##  system   x86_64, darwin15.6.0        
##  ui       X11                         
##  language (EN)                        
##  collate  en_GB.UTF-8                 
##  ctype    en_GB.UTF-8                 
##  tz       Europe/London               
##  date     2020-01-28                  
## 
## ─ Packages ───────────────────────────────────────────────────────────────────
##  package     * version date       lib source        
##  assertthat    0.2.1   2019-03-21 [1] CRAN (R 3.6.0)
##  backports     1.1.5   2019-10-02 [1] CRAN (R 3.6.0)
##  broom         0.5.3   2019-12-14 [1] CRAN (R 3.6.0)
##  callr         3.4.0   2019-12-09 [1] CRAN (R 3.6.0)
##  cellranger    1.1.0   2016-07-27 [1] CRAN (R 3.6.0)
##  cli           2.0.0   2019-12-09 [1] CRAN (R 3.6.0)
##  colorspace    1.4-1   2019-03-18 [1] CRAN (R 3.6.0)
##  crayon        1.3.4   2017-09-16 [1] CRAN (R 3.6.0)
##  DBI           1.1.0   2019-12-15 [1] CRAN (R 3.6.0)
##  dbplyr        1.4.2   2019-06-17 [1] CRAN (R 3.6.0)
##  desc          1.2.0   2018-05-01 [1] CRAN (R 3.6.0)
##  devtools      2.2.1   2019-09-24 [1] CRAN (R 3.6.0)
##  digest        0.6.23  2019-11-23 [1] CRAN (R 3.6.0)
##  dplyr       * 0.8.3   2019-07-04 [1] CRAN (R 3.6.0)
##  ellipsis      0.3.0   2019-09-20 [1] CRAN (R 3.6.0)
##  evaluate      0.14    2019-05-28 [1] CRAN (R 3.6.0)
##  fansi         0.4.0   2018-10-05 [1] CRAN (R 3.6.0)
##  farver        2.0.1   2019-11-13 [1] CRAN (R 3.6.0)
##  forcats     * 0.4.0   2019-02-17 [1] CRAN (R 3.6.0)
##  fs            1.3.1   2019-05-06 [1] CRAN (R 3.6.0)
##  generics      0.0.2   2018-11-29 [1] CRAN (R 3.6.0)
##  gganimate   * 1.0.4   2019-11-18 [1] CRAN (R 3.6.0)
##  ggplot2     * 3.2.1   2019-08-10 [1] CRAN (R 3.6.0)
##  ggthemes    * 4.2.0   2019-05-13 [1] CRAN (R 3.6.0)
##  gifski        0.8.6   2018-09-28 [1] CRAN (R 3.6.0)
##  glue        * 1.3.1   2019-03-12 [1] CRAN (R 3.6.0)
##  gtable        0.3.0   2019-03-25 [1] CRAN (R 3.6.0)
##  haven         2.2.0   2019-11-08 [1] CRAN (R 3.6.0)
##  hms           0.5.2   2019-10-30 [1] CRAN (R 3.6.0)
##  htmltools     0.4.0   2019-10-04 [1] CRAN (R 3.6.0)
##  httr          1.4.1   2019-08-05 [1] CRAN (R 3.6.0)
##  janitor     * 1.2.0   2019-04-21 [1] CRAN (R 3.6.0)
##  jsonlite      1.6     2018-12-07 [1] CRAN (R 3.6.0)
##  knitr         1.26    2019-11-12 [1] CRAN (R 3.6.0)
##  labeling      0.3     2014-08-23 [1] CRAN (R 3.6.0)
##  lattice       0.20-38 2018-11-04 [1] CRAN (R 3.6.2)
##  lazyeval      0.2.2   2019-03-15 [1] CRAN (R 3.6.0)
##  lifecycle     0.1.0   2019-08-01 [1] CRAN (R 3.6.0)
##  lubridate     1.7.4   2018-04-11 [1] CRAN (R 3.6.0)
##  magrittr      1.5     2014-11-22 [1] CRAN (R 3.6.0)
##  memoise       1.1.0   2017-04-21 [1] CRAN (R 3.6.0)
##  modelr        0.1.5   2019-08-08 [1] CRAN (R 3.6.0)
##  munsell       0.5.0   2018-06-12 [1] CRAN (R 3.6.0)
##  nlme          3.1-143 2019-12-10 [1] CRAN (R 3.6.0)
##  pillar        1.4.2   2019-06-29 [1] CRAN (R 3.6.0)
##  pkgbuild      1.0.6   2019-10-09 [1] CRAN (R 3.6.0)
##  pkgconfig     2.0.3   2019-09-22 [1] CRAN (R 3.6.0)
##  pkgload       1.0.2   2018-10-29 [1] CRAN (R 3.6.0)
##  plyr          1.8.5   2019-12-10 [1] CRAN (R 3.6.0)
##  png           0.1-7   2013-12-03 [1] CRAN (R 3.6.0)
##  prettyunits   1.0.2   2015-07-13 [1] CRAN (R 3.6.0)
##  processx      3.4.1   2019-07-18 [1] CRAN (R 3.6.0)
##  progress      1.2.2   2019-05-16 [1] CRAN (R 3.6.0)
##  ps            1.3.0   2018-12-21 [1] CRAN (R 3.6.0)
##  purrr       * 0.3.3   2019-10-18 [1] CRAN (R 3.6.0)
##  R6            2.4.1   2019-11-12 [1] CRAN (R 3.6.0)
##  Rcpp          1.0.3   2019-11-08 [1] CRAN (R 3.6.0)
##  readr       * 1.3.1   2018-12-21 [1] CRAN (R 3.6.0)
##  readxl      * 1.3.1   2019-03-13 [1] CRAN (R 3.6.0)
##  remotes       2.1.0   2019-06-24 [1] CRAN (R 3.6.0)
##  reprex        0.3.0   2019-05-16 [1] CRAN (R 3.6.0)
##  rlang       * 0.4.2   2019-11-23 [1] CRAN (R 3.6.0)
##  rmarkdown     2.0     2019-12-12 [1] CRAN (R 3.6.0)
##  rprojroot     1.3-2   2018-01-03 [1] CRAN (R 3.6.0)
##  rstudioapi    0.10    2019-03-19 [1] CRAN (R 3.6.0)
##  rvest         0.3.5   2019-11-08 [1] CRAN (R 3.6.0)
##  scales        1.1.0   2019-11-18 [1] CRAN (R 3.6.0)
##  sessioninfo   1.1.1   2018-11-05 [1] CRAN (R 3.6.0)
##  snakecase     0.11.0  2019-05-25 [1] CRAN (R 3.6.0)
##  stringi       1.4.3   2019-03-12 [1] CRAN (R 3.6.0)
##  stringr     * 1.4.0   2019-02-10 [1] CRAN (R 3.6.0)
##  testthat      2.3.1   2019-12-01 [1] CRAN (R 3.6.0)
##  tibble      * 2.1.3   2019-06-06 [1] CRAN (R 3.6.0)
##  tidyr       * 1.0.0   2019-09-11 [1] CRAN (R 3.6.0)
##  tidyselect    0.2.5   2018-10-11 [1] CRAN (R 3.6.0)
##  tidyverse   * 1.3.0   2019-11-21 [1] CRAN (R 3.6.0)
##  tweenr        1.0.1   2018-12-14 [1] CRAN (R 3.6.0)
##  usethis       1.5.1   2019-07-04 [1] CRAN (R 3.6.0)
##  vctrs         0.2.1   2019-12-17 [1] CRAN (R 3.6.2)
##  withr         2.1.2   2018-03-15 [1] CRAN (R 3.6.0)
##  xfun          0.11    2019-11-12 [1] CRAN (R 3.6.0)
##  xml2          1.2.2   2019-08-09 [1] CRAN (R 3.6.0)
##  yaml          2.2.0   2018-07-25 [1] CRAN (R 3.6.0)
##  zeallot       0.1.0   2018-01-28 [1] CRAN (R 3.6.0)
## 
## [1] /Library/Frameworks/R.framework/Versions/3.6/Resources/library